package CasasJusticia.Modelo.Estadisticas.Variables
{
	import CasasJusticia.Modelo.Estadisticas.CamposSolicitud;
	import CasasJusticia.Modelo.Estadisticas.Solicitud;
	import mx.controls.dataGridClasses.DataGridColumn;
	
	import mx.charts.series.*;
	import mx.collections.ArrayCollection;	
	
	public class Genero
	{
		private static var nombreCampoCategoria:String = "NomGenero";
		public static var nombreCampoTotal:String = "Total";
		
		public static function ObtenerCategoriasVariable(array:ArrayCollection):Array
		{
			var categorias:Array = new Array();
			
			for each(var registro:Object in array)
			{
				var nombreCategoria:String = String(registro[nombreCampoCategoria]);
				
				if (categorias.indexOf(nombreCategoria) == -1)			
					categorias.push(nombreCategoria);
			}
			
			return categorias;			
		}
		
		public static function CategoriasVariable(array:ArrayCollection, tipoSolicitud:String):Array
		{
			var categorias:Array = new Array();
			var valoresCategorias:Array = Genero.ObtenerCategoriasVariable(array);
			valoresCategorias.sort();
			
			for each(var valorCategoria:String in valoresCategorias)
			{
				var nuevaCategoria:BarSeries = new BarSeries();
				nuevaCategoria.yField = tipoSolicitud;
				nuevaCategoria.xField = valorCategoria;
				nuevaCategoria.displayName = valorCategoria;				
				
				categorias.push(nuevaCategoria);
			}
			
			return categorias;
		}
		
		private static function ObtenerCategoriasSolicitud(array:ArrayCollection, tipoSolicitud:String):Array
		{
			var categoriasSolicitud:Array = new Array();
			for each(var registro:Object in array)
			{				
				var idTipoSolicitud:String;
				switch(tipoSolicitud)
				{
					case Solicitud.Entidad:
						idTipoSolicitud = String(registro[CamposSolicitud.IdEntidad]);
						break;
					case Solicitud.Estado:
						idTipoSolicitud = String(registro[CamposSolicitud.IdEstadoSolicitud]);
						break;
					case Solicitud.Motivo:
						idTipoSolicitud = String(registro[CamposSolicitud.IdMotivoSolicitud]);
						break;
				}				
				
				if (categoriasSolicitud.indexOf(idTipoSolicitud) == -1)
					categoriasSolicitud.push(idTipoSolicitud);
			}
			return categoriasSolicitud;
		}
		
		private static function ObtenerRegistro(array:ArrayCollection, tipoSolicitud:String, idTipoSolicitud:String):Object
		{
			var objeto:Object = new Object();
			var totalRegistro:Number = 0;
			
			for each(var registro:Object in array)
			{
				var idTipoSolicitudTmp:String;
				var valorTipoSolicitud:String;
				switch(tipoSolicitud)
				{
					case Solicitud.Entidad:
						idTipoSolicitudTmp = String(registro[CamposSolicitud.IdEntidad]);
						valorTipoSolicitud = String(registro[CamposSolicitud.NombreEntidad]);
						break;
					case Solicitud.Estado:
						idTipoSolicitudTmp = String(registro[CamposSolicitud.IdEstadoSolicitud]);
						valorTipoSolicitud = String(registro[CamposSolicitud.NomEstadoSolicitud]);						
						break;
					case Solicitud.Motivo:
						idTipoSolicitudTmp = String(registro[CamposSolicitud.IdMotivoSolicitud]);
						valorTipoSolicitud = String(registro[CamposSolicitud.NomMotivoSolicitud]);						
						break;
				}
				var nombreSexo:String = String(registro[nombreCampoCategoria]);
				var total:Number = Number(registro[nombreCampoTotal]);
				if (idTipoSolicitud == idTipoSolicitudTmp)
				{
					objeto[tipoSolicitud] = valorTipoSolicitud;
					objeto[nombreSexo] = total;	
					totalRegistro += total;
				}	
			}
			objeto[Genero.nombreCampoTotal] = totalRegistro;
			return objeto;
		}
		
		public static function ObtenerRegistros(array:ArrayCollection, tipoSolicitud:String):ArrayCollection
		{
			var resultados:ArrayCollection = new ArrayCollection();
			try
			{
				var arrayCollection:ArrayCollection = new ArrayCollection();				
				var idTiposSolicitud:Array = Genero.ObtenerCategoriasSolicitud(array, tipoSolicitud);				
				
				for each(var idTipoSolicitud:String in idTiposSolicitud)
				{					
					var registro:Object = Genero.ObtenerRegistro(array, tipoSolicitud, idTipoSolicitud);
					if (registro != null)
						resultados.addItem(registro);
				}
			}
			catch(error:Error)
			{
				return new ArrayCollection();
			}
			finally
			{
				return resultados;			
			}
		}
	}
}